/* eslint-disable */
/**
 * @name 接收一个promise的iterable类型（注：Array，Map，Set都属于ES6的iterable类型）的输入，并且只返回一个Promise实例，那个输入的所有promise的resolve回调的结果是一个数组，结果是按执行顺序存放。这个Promise的resolve回调执行是在所有输入的promise的resolve回调都结束，或者输入的iterable里没有promise了的时候。它的reject回调执行是，只要任何一个输入的promise的reject回调执行或者输入不合法的promise就会立即抛出错误，并且reject的是第一个抛出的错误信息
 * @param {promise} promises
 * @returns promise
 */
const allOrder = function allOrder(promises) {
  let _resolve, _reject;
  const retPromise = new Promise((resolve, reject) => {
    _resolve = resolve;
    _reject = reject;
  });
  let promiseLen = promises.length;
  let count = 0;
  let ret = [];
  for (const promise of promises) {
    Promise.resolve(promise).then(
      res => {
        count++;
        ret.push(res);
        if (count === promiseLen) {
          _resolve(ret);
        }
      },
      error => {
        _reject(error);
      }
    );
  }
  return retPromise;
};
export default allOrder;
